package Day008_List_Collections_set.Demo04_Collections常用方法;

/*
    java.utils.Collections 是集合工具类，用来对集合进行操作。

    常用方法如下：
            1.public static void shuffle(List<?> list) :打乱集合顺序。

            2.public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。
                    默认规则:事先写好的排序规则
                           排序规则在 集合元素 所属的 类(Integer类) 中事先写好的!
                           集合元素所属的类通过实现Comparable比较器接口,重写接口中的compareTo方法,在该方法中指定默认排序规则

            3.public static <T> void sort(List<T> list，Comparator<? super T> ) :将集合中元素按照指定规则排序
                    指定规则:可以自己指定
                    指定:   通过传入Comparator接口的实现类对象,在Comparator实现类中就得重写compare方法,并在该方法中书写排序规则
 */

import java.util.*;

public class Test {
    public static void main(String[] args) {

        List<Integer> list= new ArrayList<>();

        list.add(100);
        list.add(200);
        list.add(300);
        list.add(400);
        list.add(500);
        System.out.println("原集合:" + list); //[100, 200, 300, 400, 500]

        //1. shuffle(List<?> list) :打乱集合顺序
        Collections.shuffle(list);
        System.out.println("打乱顺序后集合:" + list); //[400, 500, 200, 100, 300] [300, 500, 200, 100, 400]........

        //2. sort(List<T> list) :将集合中元素按照(默认规则)排序
        Collections.sort(list);
        System.out.println("排序后的集合:" + list); //[100, 200, 300, 400, 500]  升序!

        //3.sort(List<T> list，Comparator<? super T> ) :将集合中元素按照指定规则排序
        //指定规则,降序排序
        Collections.sort(list, new Comparator<Integer>() { //(不创建实现类对象)使用匿名内部类
            @Override
            public int compare(Integer o1, Integer o2) {
                /*
                    前(第一个参数)减后(第二个参数) 升序
                    后(第二个参数)减前(第一个参数) 降序
                 */
                return o2-o1;
            }
        });
        //
        //  Collections.sort(list,Collections.reverseOrder()); 降序
        //  Collections.reverse(list);反序
        //
        System.out.println("排序(降序)后的集合:" + list); //[500, 400, 300, 200, 100] 降序!


        List<Double> list2 = new ArrayList<>();
        list2.add(0.1);
        list2.add(1.2);
        list2.add(3.5);
        list2.add(2.1);

        Collections.sort(list2, new Comparator<Double>() {
            @Override
            public int compare(Double o1, Double o2) {
                return (int)(o1-o2);
            }
        });
        //
        //Collections.sort(list2,Collections.reverseOrder()); //[3.5, 2.1, 1.2, 0.1]
        //
        System.out.println(list2); //[0.1, 1.2, 2.1, 3.5]
    }
}
